#pragma once
#include "xmux.h"
#include "xtools.h"

class XCODEC_API XMuxTask : public XThread {
public:
  /// @brief 打开封装文件
  /// @param url 输出地址
  /// @param video_para 视频参数
  /// @param video_time_base 视频时间基数
  /// @param audio_para 音频参数
  /// @param audio_time_base 音频时间基数
  /// @return 成功放回true
  bool Open(const char *url, AVCodecParameters *video_para = nullptr,
            AVRational *video_time_base = nullptr,
            AVCodecParameters *audio_para = nullptr,
            AVRational *audio_time_base = nullptr);
  // 接收数据
  void Do(AVPacket *pkt) override;

protected:
  void Main() override;

private:
  XMux xmux_;
  XAVPacketList pkts_;
  std::mutex mtx_;
};